fields-converter-derive
Collection of procedural macros to allow you "copy", "move" and "duplicate" your structs
fields-wise.
Here's an ultimate example to give you a feel for what you can do with this crate:
#[macro_use(Duplicate, MoveFields, CloneFields, EqFields, OrdFields)]
extern crate fields_converter_derive;
extern crate clone_fields;
use clone_fields::{CloneInto, CloneFrom};
#[derive(Duplicate, MoveFields, CloneFields, EqFields, OrdFields, Debug)]
#[destinations("Copied")]
#[add_derives(Clone, Debug, PartialEq)]
struct Origin<'a, T> {
field1: String,
field2: T,
field3: &'a str,
}
fn main() {
let source = Origin {
field1: "lol".into(),
field2: 9907,
field3: "testing",
};
let copied: Copied<_> = source.clone_into();
let cloned = copied.clone();
assert_eq!(copied, cloned);
assert_eq!(source, cloned);
let greater = Copied {
field2: source.field2 + 1,
..cloned
};
assert!(source < greater);
assert!(greater > source);
let moved: Copied<_> = source.into();
}
License: MIT/Apache-2.0